export function params() {
    const D01 = {
        0x5A: '自动曝光',
        0xA5: '手动曝光'
    }
    const D02 = {
        0x5A: '自动调焦',
        0xA5: '手动调焦'
    }
    const D03 = {
        0x01: 'F1位置',
        0x02: 'F2位置',
        0x03: 'F3位置',
        0x04: 'F4位置',
        0x05: 'F5位置',
        0x06: 'F6位置'
    }
    const D04 = {
        0x09: '全色通道',
        0x01: 'CH1通道',
        0x02: 'CH2通道',
        0x03: 'CH3通道',
        0x04: 'CH4通道',
        0x05: 'CH5通道',
        0x06: 'CH6通道',
        0x07: 'CH7通道',
        0x08: 'CH8通道'

    }
    const D05 = {
        0x00: '调焦轮零位检测正常',
        0x0F: '调焦轮零位检测A正常',
        0xF0: '调焦轮零位检测B正常',
        0xFF: '调焦轮零位检测异常'
    }
    const D06 = {
        0x00: '滤光轮零位检测正常',
        0x0F: '滤光轮零位检测A正常',
        0xF0: '滤光轮零位检测B正常',
        0xFF: '滤光轮零位检测异常'

    }
    const D07 = {
        0x00: '指令正确',
        0x11: '奇校验错误',
        0x21: '停止位错误',
        0x22: '传输超时错误',
        0x23: '指令格式错误',
        0x24: '累加和错误'
    }
    const TD01 = (v) => {
        // d: 时区为北京时的时候， 转换最终时间 需要减去offset 方可用 toISO 方法显示为北京时 - t.getTimezoneOffset()*60e3
        // 	  // d 指定时区为utc / toiso 也是utc 也就是与开始时间处于同一时区，处理过程就不需要在考虑时区问题了
        let d = new Date('2020-01-01T00:00:00Z')
        let t = parseInt(v.toString(16).padStart(12, 0).slice(0, 8), 16) * 1000 + (v & 0xFFFF) + d.getTime()
        return new Date(t).toISOString().slice(0, 23).replace('T', ' ')
    }

    const F01 = (v, n) => {
        return v ? 2.4 * v - 300 : -273
    }

    const F03 = (v) => {
        let a = -6.01188
        let b = 4622.53337
        let c = -86421
        let vcc = 4.8
        let r0 = 10000
        let qan = 255
        let van = 5.1
        let vr = v / (qan / van)
        let rx = vr * r0 / (vcc - vr)
        let T = 2 * c / (-b + Math.sqrt(b ** 2 - 4 * c * (a - Math.log(rx)))) - 273.15
        return T
    }

    const F02 = (v, n) => {
        let a = -6.01188
        let b = 4622.53337
        let c = -86421.7241
        let V = 5
        let R0 = 10
        let T = 2 * c / (-b + (b ** 2 - 4 * c * (a - Math.log(v * R0 / V - v))) ** 0.5) - 273.15
        return T
    }
    return [
//        1			包同步码		16			0xEB90
        new Params('a001', '包同步码', 16, null, null, null, null),
//        2			包标识		16			0x092C	/	/	/	/
        new Params('a002', '包标识', 16, null, null, null, null),
//3			包序		16
        new Params('a003', '包序', 16, null, null, null, null),
//4			包长		16			0x3F
        new Params('a004', '包长', 16, null, null, null, null),
//5			副导头（时间码）		48		源码
        new Params('a005', '副导头（时间码）', 48, null, v => TD01(v), null, null),
//6			命令类型		8			0x25	/	/	/	/
        new Params('a006', '命令类型', 8, null, null, null, null),
//7			多光谱相机曝光方式	无	8		解析显示	0x5A:自动曝光
//0xA5:手动曝光			无	无
        new Params('a007', '多光谱相机曝光方式', 8, null, null, v => D01[v], null),
//8			多光谱相机曝光档位	无	8		十进制	0～255档	无	无	无	无
        new Params('a008', '多光谱相机曝光档位', 8, null, null, null, null),
//9			多光谱相机调焦方式	无	8		解析显示	0x5A:自动调焦
//0xA5:手动调焦			无	无
        new Params('a009', '多光谱相机调焦方式', 8, null, null, v => D02[v], null),
//10			多光谱相机调焦档位	无	8		解析显示	0x01:F1位置
//0x02:F2位置
//0x03:F3位置
//0x04:F4位置
//0x05:F5位置
//0x06:F6位置			无	无
        new Params('a010', '多光谱相机调焦档位', 8, null, null, v => D03[v], null),
        //11			多光谱相机光谱通道	无	8		解析显示	0x09:全色通道
        //0x01:CH1通道
        //0x02:CH2通道
        //0x03:CH3通道
        //0x04:CH4通道
        //0x05:CH5通道
        //0x06:CH6通道
        //0x07:CH7通道
        //0x08:CH8通道			无	无
        new Params('a011', '多光谱相机光谱通道', 8, null, null, v => D04[v], null),
//12			多光谱相机调焦轮状态	无	8		解析显示	0x00:调焦轮零位检测正常
//0x0F:调焦轮零位检测A正常
//0xF0:调焦轮零位检测B正常
//0xFF:调焦轮零位检测异常			无	无
        new Params('a012', '多光谱相机调焦轮状态', 8, null, null, v => D05[v], null),
//13			多光谱相机滤光轮状态	无	8		解析显示	0x00:滤光轮零位检测正常
//0x0F:滤光轮零位检测A正常
//0xF0:滤光轮零位检测B正常
//0xFF:滤光轮零位检测异常			无	无
        new Params('a013', '多光谱相机滤光轮状态', 8, null, null, v => D06[v], null),
//14			多光谱相机CMOS内部温度码	℃	8		十进制	0x00～0xFF，
//0x00:T=-273℃
//非0值:T=2.4D-300	-50℃	70℃	无	无
        new Params('a014', '多光谱相机CMOS内部温度码', 8, '℃', v => F01(v, 'a014'), v => v.toFixed(3), null),
//15			多光谱相机曝光参数	无	16		十六进制	0x0000～0x03FF			无	无
        new Params('a015', '多光谱相机曝光参数', 16, null, null, null, null),
//16			多光谱相机接收指令计数	无	8		十进制	0～255循环计数	无	无	无	无
        new Params('a016', '多光谱相机接收指令计数', 8, null, null, null, null),
//17			多光谱相机接收指令状态	无	8		解析显示	0x00:指令正确；
//0x11:奇校验错误；
//0x21:停止位错误；
//0x22:传输超时错误；
//0x23:指令格式错误；
//0x24:累加和错误。			无	无
        new Params('a017', '多光谱相机接收指令状态', 8, null, null, v => D07[v], null),
//18			多光谱相机错误指令计数	无	8		十进制	0～255循环计数	无	无	无	无
        new Params('a018', '多光谱相机错误指令计数', 8, null, null, null, null),
//19			多光谱相机拍照指令计数	无	8		十进制	0～255循环计数	无	无	无	无
        new Params('a019', '多光谱相机拍照指令计数', 8, null, null, null, null),
//20			多光谱相机图像帧计数	无	8		十进制	0～255循环计数	无	无	无	无
        new Params('a020', '多光谱相机图像帧计数', 8, null, null, null, null),
//21			多光谱相机发送工程参数计数	无	8		十进制	0～255循环计数	无	无	无	无
        new Params('a021', '多光谱相机发送工程参数计数', 8, null, null, null, null),
//22			探测距离	无	16		解析显示	探测器相对于小行星中心J2000惯性系的距离L，2字节整数,单位：m。			无	无
        new Params('a022', '探测距离', 16, 'm', null, null, null),
//23			多光谱相机控温点主份	无	8		解析显示	参见EDS系统中相关参数处理方法			无	无
        new Params('a023', '多光谱相机控温点主份', 8, null, v => F03(v), v => v.toFixed(3), null),
//24			多光谱备用	/	296		/	默认0xFF
        new Params('b24', '多光谱备用', 296, null, null, null, null),
//25			校验和	/	8		/	校验和：从副导头开始到源数据的字节累加和
        new Params('a025', '校验和', 8, null, null, null, null),


    ]
}
